#!/usr/bin/env python3
"""
PDF转换调试脚本
用于诊断和修复PDF转换中的编码问题

使用方法:
    python debug_convert.py
"""

from pdf_converter import PDFConverter
import os

def debug_pdf_conversion():
    """调试PDF转换过程"""
    pdf_path = "docs/ch01.pdf"

    print("🔍 PDF转换调试工具")
    print("=" * 50)

    if not os.path.exists(pdf_path):
        print(f"❌ 错误: 找不到文件 {pdf_path}")
        return

    # 创建转换器
    converter = PDFConverter(encoding='utf-8')

    print(f"📄 输入文件: {pdf_path}")
    print(f"📊 文件大小: {os.path.getsize(pdf_path):,} 字节")

    try:
        # 尝试不同的输出编码
        encodings_to_try = ['utf-8', 'gbk', 'gb2312', 'utf-8-sig']

        for encoding in encodings_to_try:
            print(f"\n🔄 尝试使用 {encoding} 编码...")

            output_path = f"docs/ch01_debug_{encoding}.txt"

            try:
                # 使用调试模式转换
                converter.encoding = encoding
                result = converter.convert_pdf_to_txt(
                    pdf_path=pdf_path,
                    output_path=output_path,
                    clean=True,
                    debug=True
                )

                # 检查输出文件
                if os.path.exists(output_path):
                    file_size = os.path.getsize(output_path)
                    print(f"✅ 成功生成文件: {output_path}")
                    print(f"📊 输出文件大小: {file_size:,} 字节")

                    # 读取并显示前几行内容
                    with open(output_path, 'r', encoding=encoding) as f:
                        first_lines = f.read()[:200]
                        print(f"📝 内容预览:\n{first_lines}...")

                else:
                    print(f"❌ 未生成输出文件")

            except Exception as e:
                print(f"❌ 使用 {encoding} 编码时出错: {str(e)}")

        print(f"\n🎯 建议:")
        print("1. 检查生成的调试文件，找到最清晰的版本")
        print("2. 如果仍然有乱码，PDF可能是扫描版图片")
        print("3. 对于扫描版PDF，需要使用OCR技术")

    except Exception as e:
        print(f"❌ 调试过程中发生错误: {str(e)}")

def check_pdf_metadata():
    """检查PDF元数据信息"""
    import fitz

    pdf_path = "docs/ch01.pdf"

    print(f"\n🔍 检查PDF元数据: {pdf_path}")
    print("=" * 50)

    try:
        doc = fitz.open(pdf_path)

        print(f"📄 页数: {doc.page_count}")
        print(f"📄 元数据: {doc.metadata}")

        # 检查第一页的信息
        if doc.page_count > 0:
            page = doc[0]
            print(f"📄 第1页尺寸: {page.rect}")
            print(f"📄 第1页旋转: {page.rotation}")

            # 检查页面是否包含文本
            text = page.get_text()
            print(f"📄 第1页文本长度: {len(text)}")

            # 检查是否是图片
            image_list = page.get_images()
            print(f"📄 第1页图片数量: {len(image_list)}")

            if len(text.strip()) < 10 and len(image_list) > 0:
                print("⚠️  警告: 这个PDF可能是扫描版图片，需要OCR处理")

        doc.close()

    except Exception as e:
        print(f"❌ 读取PDF元数据时出错: {str(e)}")

if __name__ == "__main__":
    check_pdf_metadata()
    debug_pdf_conversion()